home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / OCFSRC.PAK / MAKEFILE < prev    next >
Text File  |  1997-05-06  |  16KB  |  596 lines

  1. #-----------------------------------------------------------------------------
  2. # MAKEFILE for ObjectComponents Framework
  3. #
  4. # Copyright (c) Borland International 1994, 1996
  5. # All Rights Reserved
  6. #
  7. # $Revision:   2.30  $
  8. #
  9. # Defines:
  10. #   MODEL=<d|s|m|l|f>   one of: dll(default), small, medium, large or flat
  11. #   WIN32        enables win32 static (flat) or DLL
  12. #   MT          links to the multithreaded version of the RTL
  13. #   DIAGS        enables runtime diagnostics (adds 'd' to lib name before 'w')
  14. #   DEBUG        enables debug info for TDW & TD32
  15. #   VCL         builds OWL using the VCL-compatible RTL (cp32mt)
  16. #                 (implies -DMT and -DNAMESPACE; requires MODEL=t and WIN32)
  17. #   OCFNOPCH     disables precompiled headers for OCF
  18. #   OCFNAME=Xxx  lib & DLL name base, Defaults to 'OCF'. Req. for non-diag DLLs
  19. #   OCFVER=nnn   version for OCF DLL. Defaults to 52. Req. for non-diag DLLs
  20. #   USERDLL      builds OCF for use in a user DLL (adds 'u' to lib name after
  21. #                model)
  22. #   CODEGUARD    builds OCF with CodeGuard:  1=basic data, 2=full checking
  23. #   NAMESPACE    builds OCF within a namespace "OCF"
  24. #   ALIGN=<1|2|4|8>        specifies the alignment
  25. #   ILINK     uses ILINK32 instead of TLINK32 to link
  26. #
  27. # Define these for alternate OCF build directories:
  28. #   OCFSRCDIR    defaults to: $(BCROOT)\source\OCF
  29. #   OCFINCDIR    defaults to: $(BCROOT)\include
  30. #   OCFLIBDIR    defaults to: $(BCROOT)\lib
  31. #   OCFBINDIR    defaults to: $(BCROOT)\bin
  32. #
  33. #   When building VCL-compatible libraries, the makefile defaults
  34. #   assume BCROOT points to the base of the C++Builder tree. If
  35. #   you are building in the context of Borland C++, then you must
  36. #   set BCBROOT explicitly yourself.
  37. #
  38. #   BCBROOT      defaults to: $(BCROOT)   (root of C++Builder)
  39. #   VCLINCDIR    defaults to: $(BCBROOT)\include\VCL
  40. #   VCLOBJDIR    defaults to: $(BCBROOT)\lib\obj
  41. #   VCLLIBDIR    defaults to: $(BCBROOT)\lib
  42. #-----------------------------------------------------------------------------
  43.  
  44. .autodepend
  45. .cacheautodepend
  46. .swap
  47.  
  48. #--------------------------------------------------------------------
  49. # Fill in defaults. The following table describes the logic used for
  50. # assigning defaults. Blank means "don't care", ! means not defined
  51. #
  52. #   MODEL | DLL | WIN16 | WIN32 | RESULTS
  53. #  -------+-----+-------+-------+--------------------------------
  54. #     !   |  !  |   !   |       | MODEL=f    WIN32=1  (default)
  55. #   ==f|t | ==1 |   !   |       | MODEL=f|t  WIN32=1  DLL=1
  56. #   ==f|t |  !  |   !   |       | MODEL=f|t  WIN32=1
  57. #     !   |  !  |  ==1  |   !   | MODEL=l    WIN16=1  DLL=1
  58. #         | ==1 |  ==1  |   !   | MODEL=l    WIN16=1  DLL=1
  59. #   ==m|l |  !  |       |   !   | MODEL=m|l  WIN16=1
  60. #---------+-----+-------+-------+--------------------------------
  61.  
  62. #
  63. # If no model is defined or implied, set a default
  64. #
  65. !if !$d(MODEL) && !defined(MT) && !$d(WIN16) && !$d(OS2) && !$d(VCL)
  66.   MODEL = f    # default build model = flat static, Win32
  67. # MODEL = d    # default build model = flat DLL, Win32
  68. !endif
  69.  
  70. #
  71. # DLL model implies some other settings
  72. #
  73. !if $(MODEL) == d     # model d is short for building the DLL-- flat or large
  74.   DLL = 1
  75. ! if !$d(WIN16) && !$d(OS2)
  76.     WIN32 = 1         # DLL is 32bit by default
  77. ! endif
  78. !endif
  79.  
  80. #
  81. # If no system was set, choose a default 
  82. #
  83. !if (!$d(WIN32) && !$d(WIN16) && !$d(OS2))
  84. ! if ($(MODEL) == t || $(MODEL) == f || $d(VCL) || $d(MT)) && !$d(OS2)
  85.     WIN32 = 1    # default to WIN32 switch on for flat or multi-threaded model
  86. ! elif $(MODEL)==l
  87.     WIN16 = 1    # default to WIN16 switch on for large model
  88. ! endif
  89. !endif
  90.  
  91. #
  92. # For multithreaded target, set the value of MT
  93. #
  94. !if $(MODEL) == t || $d(MT)
  95.   MT = mt       # model t implies MT. Use MT as 'mt' to build library names
  96. !endif
  97.  
  98. #
  99. # VCL compatibility implies use of namespace
  100. !if $d(VCL)
  101.   NAMESPACE = 1
  102. !endif
  103.  
  104. #
  105. # Make sure model is consistent with system
  106. #
  107. !if $d(WIN32)
  108. ! if $d(MT) || $d(VCL)
  109.     MODEL = t
  110. ! else
  111.     MODEL = f
  112. ! endif
  113. !elif $d(DLL)
  114.   MODEL = l
  115. !endif
  116.  
  117. #
  118. # Some MODELs [l,f,t] always imply WIN16 or WIN32 - Update
  119. # according to model.
  120. #
  121. !if   $(MODEL) == l                          # MODEL == l
  122.   WIN16 = 1
  123. !elif ($(MODEL) == t || $(MODEL) == f)  # MODEL == f|t
  124.   WIN32 = 1
  125. !endif
  126.  
  127. #
  128. # Figure out default data alignment based on target
  129. #
  130. !if !$d(ALIGN)
  131. ! if $d(WIN32)
  132.     ALIGN = 1
  133. ! else
  134.     ALIGN = 1
  135. ! endif
  136. !endif
  137.  
  138. #
  139. # Check for incompatible choices and warn user
  140. #
  141. !if $d(ILINK) && $d(WIN16)
  142. ! error Cannot build 16-bit targets with ILINK.
  143. !endif
  144.  
  145. !if $d(DOS) && $d(MT)
  146. ! error Cannot build multi-thread library for DOS.
  147. !endif
  148.  
  149. !if $d(MODEL)
  150. ! if $(MODEL) != l && $(MODEL) != f && $(MODEL) != t && $(MODEL) != d
  151. !   error MODEL must be l, d, f or t
  152. ! endif
  153. !endif
  154.  
  155. #--------------------------------------------------------------------
  156. # Dir & name components
  157. #--------------------------------------------------------------------
  158. !if $d(DLL)
  159.  
  160. ! if $d(WIN32)
  161. !   if $d(VCL)
  162.       KEY = v
  163. !   else
  164.       KEY = $(MODEL)
  165. !   endif
  166.     KEY = w$(KEY)i              # 32bit flat or multithread DLL import library
  167. ! else
  168.     KEY = wi                    # 16bit DLL import library
  169. ! endif
  170.  
  171. !else
  172.  
  173. ! if $d(VCL)
  174.     KEY = wv
  175. ! else
  176.     KEY = w$(MODEL)             # Static library uses w+model
  177. ! endif
  178.  
  179. !endif  # if/else $d(DLL)
  180.  
  181. ! if $d(USERDLL)
  182.   KEY = $(KEY)u                 # Static or import library for use by dlls
  183. ! endif
  184.  
  185. !if !$d(OCFNAME)
  186.   OCFNAME = OCF
  187. ! if !$d(OCFVER)
  188.     OCFVER = 52
  189. ! endif
  190. !endif
  191.  
  192. #--------------------------------------------------------------------
  193. # Debug & diagnostic flags
  194. #--------------------------------------------------------------------
  195. !if $d(DEBUG)
  196.   CDBG = -v -k -Od    # debug-info on, normal stack, no optimizations
  197. !endif
  198. !if 1 || $d(DEBUG)    # Leave public debug info in dll & strip to a .tds after
  199. ! if $d(WIN32)
  200.     LDBG = -v
  201. ! else
  202.     LDBG = -v -Vt
  203. ! endif
  204. !endif
  205.  
  206. !if $d(DIAGS)         # default diags use precondition, check, trace & warn
  207.   __DEBUG=2
  208.   __TRACE=1
  209.   __WARN=1
  210. ! if $d(WIN32)
  211.     BD=d              # Use Bids Diag version when OCF lib is diag
  212. ! else
  213.     BD=db             # Extension compatible with traditional DOS names
  214. ! endif
  215.   OD=d                # OCF libs & dll get a 'd' for Diag versions
  216. !endif
  217.  
  218. #
  219. # Build up compiler diag switches based on settings
  220. #
  221. !if $d(__DEBUG)
  222.   CDIAG = -D__DEBUG=$(__DEBUG)
  223. !endif
  224. !if $d(__TRACE)
  225.   CDIAG = $(CDIAG) -D__TRACE
  226. !endif
  227. !if $d(__WARN)
  228.   CDIAG = $(CDIAG) -D__WARN
  229. !endif
  230.  
  231. #--------------------------------------------------------------------
  232. # Dir & search paths, & precompiled headers
  233. #--------------------------------------------------------------------
  234.  
  235. #
  236. # BC tools BCBINDIR can be based on MAKEDIR if no BCROOT is defined
  237. #
  238. !if $d(BCROOT)
  239.   BCBINDIR = $(BCROOT)\bin
  240. !else
  241.   BCBINDIR = $(MAKEDIR)
  242. !endif
  243.  
  244. #
  245. # Default bcroot to whatever is in bcroot.inc
  246. #
  247.  
  248. !if !$d(BCROOT)
  249. !include $(MAKEDIR)\bcroot.inc
  250. !endif
  251.  
  252. #
  253. # Where to find BC tools, libraries and include files
  254. #
  255. BCSRCDIR = $(BCROOT)\source
  256. BCINCDIR = $(BCROOT)\include
  257. BCLIBDIR = $(BCROOT)\lib
  258. BCBINDIR = $(BCROOT)\bin
  259.  
  260. #
  261. # Where to find OCF dirs-- can set these for special layouts
  262. # Build search paths differently if OCF include dir is not below BC's
  263. #
  264. !if !$d(OCFSRCDIR)
  265.   OCFSRCDIR = $(BCSRCDIR)\ocf
  266. !endif
  267.  
  268. #
  269. # Where to find OCF headers
  270. #
  271. !if !$d(OCFINCDIR)
  272.   OCFINCDIR=$(BCINCDIR)
  273.   RCINCLUDEPATH = -i$(BCINCDIR)
  274. !else
  275.   RCINCLUDEPATH = -i$(OCFINCDIR) -i$(BCINCDIR)
  276. !endif
  277.  
  278. #
  279. # Check if BIDS header directory was specified
  280. #
  281. !if $d(BIDSINCDIR)
  282.   INCLUDE=$(OCFINCDIR);$(BIDSINCDIR);$(BCINCDIR)
  283. !else
  284.   INCLUDE=$(OCFINCDIR);$(BCINCDIR)
  285. !endif
  286.  
  287. #
  288. # Location (destination) of OCF libraries
  289. #
  290. !if !$d(OCFLIBDIR)
  291.   OCFLIBDIR = $(BCLIBDIR)
  292. !endif
  293.  
  294. #
  295. # Location (destination) of OCF binaries
  296. #
  297. !if !$d(OCFBINDIR)
  298.   OCFBINDIR = $(BCBINDIR)
  299. !endif
  300.  
  301. OCFOBJDIR = $(OCFSRCDIR)\o\$(OD)$(KEY)   # Keep seperate diag/nondiag dirs
  302.  
  303. .PATH.obj = $(OCFOBJDIR)
  304. .PATH.res = $(OCFOBJDIR)
  305. .PATH.def = $(OCFOBJDIR)
  306. .PATH.lib = $(OCFLIBDIR)
  307. .PATH.cpp = $(OCFSRCDIR)
  308.  
  309. #
  310. # Define OCFNOPCH to disable the use of Precompiled headers when building OCF
  311. #
  312. !if !$d(OCFNOPCH)
  313.   CPCH= -H=$(OCFLIBDIR)\$(OCFNAME)$(OD)$(KEY).csm -H"pch.h" -D_OCFPCH
  314. ! if $d(WIN32) || $(__MAKE__) > 0x0370   # -Hc: !valid in earlier 16-bit
  315.     CPCH= $(CPCH) -Hc
  316. ! endif
  317. !endif
  318.  
  319. #
  320. # Where to find VCL libraries, objs, and headers
  321. #
  322. !if $d(VCL)
  323. ! if !$d(BCBROOT)
  324.     BCBROOT = $(BCROOT)
  325. ! endif
  326. ! if !$d(VCLLIBDIR)
  327.     VCLLIBDIR = $(BCBROOT)\lib
  328. ! endif
  329. ! if !$d(VCLOBJDIR)
  330.     VCLOBJDIR = $(VCLLIBDIR)\obj
  331. ! endif
  332. ! if !$d(VCLINCDIR)
  333.     VCLINCDIR = $(BCBROOT)\include\vcl
  334. ! endif
  335. INCLUDE = $(INCLUDE);$(VCLINCDIR)
  336. !endif
  337.  
  338. #--------------------------------------------------------------------
  339. # Library names
  340. #--------------------------------------------------------------------
  341. OCFLIB = $(OCFLIBDIR)\$(OCFNAME)$(OD)$(KEY).lib
  342.  
  343. #
  344. # If building for VCL, use an RTL that begins "cp" instead of "cw"
  345. #
  346. !if $d(VCL)
  347.   RTLPFX=cp
  348. !else
  349.   RTLPFX=cw
  350. !endif
  351.  
  352. #--------------------------------------------------------------------
  353. # Tools and options which are Win16/Win32 independent
  354. #--------------------------------------------------------------------
  355. !if $d(NAMESPACE)
  356.   CFLAGS = $(CFLAGS) -DBI_NAMESPACE
  357. !endif
  358.  
  359. #--------------------------------------------------------------------
  360. # Tools and options for Win32
  361. #--------------------------------------------------------------------
  362. !if $d(WIN32)
  363.   CC       = $(BCBINDIR)\bcc32       # Compiler
  364. #  CC       = $(BCBINDIR)\bcc32i      # Compiler
  365.   RCC      = brcc32 -w32             # Resource compiler
  366.   CCASM    = $(BCBINDIR)\tasm32      # Assembler
  367.  
  368. ! if $d(ILINK)
  369.   LINK     = $(BCBINDIR)\ilink32     # Linker
  370. ! else
  371.   LINK     = $(BCBINDIR)\tlink32     # Linker
  372. ! endif
  373.  
  374.   LIB      = $(BCBINDIR)\tlib        # Librarian
  375.   IMPLIB   = $(BCBINDIR)\implib      # Import library generator
  376.   TDSTRIP  = $(BCBINDIR)\tdstrp32    # Debug info extractor
  377.  
  378.   CFLAGS   = -d -k- -Ogmpv $(CFLAGS) # Optimizations (-O1gmpv)
  379. ! if $d(CODEGUARD)                   # d=add data, c=add calls, t=check this
  380.     CFLAGS = $(CFLAGS) -vGd -vGt
  381. !   if $(CODEGUARD) == 2
  382.       CFLAGS= $(CFLAGS) -vGc
  383. !   endif
  384. !  endif
  385.   CFGFILE  = bcc32.cfg               # Name of compiler's config file
  386. ! if $d(DEBUG)
  387.     TLIBOPTS = /P512 /C
  388. ! else
  389.     TLIBOPTS = /P64 /0 /C
  390. ! endif
  391.  
  392. ! if $d(DLL)
  393.     CFLAGS = $(CFLAGS) -WDE -D_BUILDOCFDLL
  394.     LFLAGS = $(LDBG) -Tpd -aa -s -c
  395. !   if !$d(BIDSILIB)
  396. !     if $d(VCL)
  397.         DLL32KEY = v
  398. !     else
  399.         DLL32KEY = MODEL
  400. !     endif      
  401.       BIDSILIB = bids$(BD)$(DLL32KEY)i
  402. !   endif
  403.     STDLIBS  = import32 $(RTLPFX)32$(MT)i 
  404. !   if $d(CODEGUARD)
  405.       STDLIBS  = cg32 $(STDLIBS)
  406. !   endif
  407. ! else
  408.     CFLAGS = $(CFLAGS) -W
  409. ! endif
  410.  
  411. ! if $d(VCL)
  412.     CFLAGS  = $(CFLAGS) -b- -Vx -Ve
  413.     LFLAGS  = $(LFLAGS) -j$(VCLOBJDIR)
  414.     STDLIBS = $(STDLIBS) 
  415. ! endif 
  416.  
  417. ! if !$d(MT)
  418.     CFLAGS = $(CFLAGS) -WM-
  419. ! endif
  420.  
  421. ! if $d(VCL)
  422.     CFLAGS = $(CFLAGS) -a4
  423. ! elif $d(ALIGN)
  424.     CFLAGS = $(CFLAGS) -a$(ALIGN)
  425. ! endif
  426.  
  427. #--------------------------------------------------------------------
  428. # Tools and options for Win16
  429. #--------------------------------------------------------------------
  430. !else
  431.   CC       = $(BCBINDIR)\bcc         # Compiler
  432.   RCC      = brcc32 -31              # Resource compiler
  433.   CCASM    = $(BCBINDIR)\tasm        # Assembler
  434.   LINK     = $(BCBINDIR)\tlink       # Linker
  435.   LIB      = $(BCBINDIR)\tlib        # Librarian
  436.  
  437.   # implib needs -o switch in 16 bit for compatibility
  438.   IMPLIB   = $(BCBINDIR)\implib -o   # Import library generator
  439.   TDSTRIP  = $(BCBINDIR)\tdstrip     # Debug info extractor
  440.  
  441.   CFLAGS    = -3 -d -k- -O1gmpv      # Optimizations
  442. ! if $d(CODEGUARD)                   # d=add data, c=add calls, t=check this
  443.     CFLAGS = $(CFLAGS) -vGd -vGt
  444. !   if $(CODEGUARD) == 2
  445.       CFLAGS= $(CFLAGS) -vGc
  446. !   endif
  447. !  endif
  448.  
  449. ! if $(MODEL) != s && $(MODEL) != m  # Large models can put strs in code seg
  450.     CFLAGS = $(CFLAGS) -dc
  451. ! endif
  452.   CFLAGS   = -m$(MODEL) $(CFLAGS)    # Memory model
  453.  
  454. ! if $d(OCFFARVTABLE)
  455.     CFLAGS = $(CFLAGS) -D_OCFFARVTABLE;_BIDSFARVTABLE #;_RTLFARVTABLE
  456. ! endif
  457. ! if $d(NO_CPP_EXCEPTIONS)
  458.     CFLAGS = $(CFLAGS) -DNO_CPP_EXCEPTIONS -x-
  459. ! endif
  460.   CFGFILE = turboc.cfg
  461.  
  462. ! if $d(DEBUG)
  463.     TLIBOPTS = /P512 /C
  464. ! else
  465.     TLIBOPTS = /P32 /0 /C
  466. ! endif
  467.  
  468. ! if $d(DLL)                       # Build the 16bit OCF for use with RTL/BIDS DLL
  469. !   if $d(USERDLL)
  470.       CFLAGS = $(CFLAGS) -WDE -D_OCFDLL -xc # _BUILDOCFDLL in DLLs (not a dll)
  471. !   else
  472.       CFLAGS = $(CFLAGS) -WSE -D_OCFDLL     # _BUILDOCFDLL in EXEs (not a dll)
  473. !   endif
  474.     LFLAGS = $(LDBG) -Twd -n -s -c -C
  475. !   if !$d(BIDSILIB)
  476.       BIDSILIB = bids$(BD)i
  477. !   endif
  478.     STDLIBS  = import crtldll        # Libs for linking the OC DLL
  479.  
  480. ! else
  481. !   if $d(USERDLL)
  482.       CFLAGS = $(CFLAGS) -WDE -xc    # Build static OCF lib for use in DLLs
  483. !   else
  484.       CFLAGS = $(CFLAGS) -WSE        # Build static OCF lib for use in EXEs
  485. !   endif
  486. ! endif
  487.  
  488. ! if $d(ALIGN)
  489.     CFLAGS = $(CFLAGS) -a$(ALIGN)
  490. ! endif
  491.  
  492. !endif
  493.  
  494. #--------------------------------------------------------------------
  495. # Rules
  496. #--------------------------------------------------------------------
  497. .rc.res:
  498.   $(RCC) $(RCINCLUDEPATH) -fo$@ $.
  499.  
  500. .cpp.obj:
  501.   $(CC) {$& }
  502.  
  503. #--------------------------------------------------------------------
  504. # Various file lists needed for dependency checking and LIBing.
  505. #
  506. #   OBJS_CMN are the objs common to static libs and the dll
  507. #   OBJS_LIB are the objs that go into libs and implibs only, not the dlls
  508. #   OBJS_DLL are the objs that go into the dll only
  509. #   LIBDEPOBJS is the list of object files for lib/implib dependency checking
  510. #   LIBOBJS is the list of object files for building/addingto the libraries
  511. #   LINKOBJS is the list of object files for building the DLL
  512. #--------------------------------------------------------------------
  513.  
  514. # Common, unsectioned objs go into static libs and DLLs
  515. #
  516. OBJS_CMN = \
  517.  PFXappdesc.obj\
  518.  PFXautocli.obj\
  519.  PFXautodisp.obj\
  520.  PFXautoiter.obj\
  521.  PFXautostck.obj\
  522.  PFXautosrv.obj\
  523.  PFXautosym.obj\
  524.  PFXautoval.obj\
  525.  PFXocreg.obj\
  526.  PFXocstorag.obj\
  527.  PFXoleutil.obj\
  528.  PFXtypelib.obj\
  529.  PFXversion.obj\
  530.  PFXexcept.obj
  531.  
  532. OBJS_CMN = $(OBJS_CMN)\
  533.  PFXocapp.obj\
  534.  PFXocdoc.obj\
  535.  PFXocpart.obj\
  536.  PFXocremvie.obj\
  537.  PFXocdata.obj\
  538.  PFXoclink.obj\
  539.  PFXocview.obj\
  540.  PFXocguid.obj
  541.  
  542. # Modules built only in 32-bit
  543. #
  544. !if    $d(WIN32)
  545. OBJS_CMN = $(OBJS_CMN) \
  546.  PFXocctrl.obj
  547. !endif
  548.  
  549.  
  550. # Put together obj groups into lists for different targets
  551. #
  552. !if $d(DLL)
  553.  LIBDEPOBJS= $(OBJS_CMN:PFX=) $(OBJS_LIB:PFX=) $(OBJS_DLL:PFX=)
  554.  LIBOBJS   = $(OBJS_LIB:PFX=+) $(OBJS_CMN:PFX=+) $(OBJS_DLL:PFX=+)
  555.  LINKOBJS  = $(OBJS_CMN:PFX=) $(OBJS_DLL:PFX=)
  556. !else
  557.  LIBDEPOBJS= $(OBJS_CMN:PFX=) $(OBJS_LIB:PFX=)
  558.  LIBOBJS   = $(OBJS_CMN:PFX=+) $(OBJS_LIB:PFX=+)
  559. !endif
  560.  
  561. #--------------------------------------------------------------------
  562. # targets
  563. #--------------------------------------------------------------------
  564. all: cfgfile $(OCFLIB)
  565.  
  566. cfgfile:
  567.   @-if not exist $(.PATH.obj)\..\NUL md $(.PATH.obj)\..
  568.   @-if not exist $(.PATH.obj)\NUL md $(.PATH.obj)
  569.   @copy &&|
  570. -I$(INCLUDE)
  571. -c -w $(CFLAGS) $(CDBG) $(CDIAG)
  572. $(CPCH) -n$(.PATH.obj) $(CCFOCF)
  573. | $(CFGFILE) > NUL
  574.  
  575. $(OCFLIB): $(LIBDEPOBJS)
  576.   @-del $(OCFLIB)
  577.   @cd $(.PATH.obj)
  578.   $(LIB) $(TLIBOPTS) $(OCFLIB) @&&|
  579. $(LIBOBJS)
  580. |
  581.   @cd $(.PATH.cpp)
  582.  
  583. clean:
  584.   @echo Removing .OBJs from $(.PATH.obj)
  585.   @if exist $(.PATH.obj)\*.obj del $(.PATH.obj)\*.obj
  586.   @if exist $(.PATH.obj)\*.csm del $(.PATH.obj)\*.csm
  587.  
  588. !if $d(WIN32)
  589. ocguid.obj: ocguid.cpp
  590.   $(CC) -H- ocguid.cpp
  591. !else
  592. ocguid.obj: ocguid.cpp
  593.   $(CC) -H- -zE_TEXT -zFCODE ocguid.cpp
  594. !endif
  595.